package icu.lookyousmileface.blockqueue;

import java.util.Collections;
import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;

/**
 * @author starrysky
 * @title: BlockQueueUse
 * @projectName Juc_Pro
 * @description: 阻塞队列的使用
 * @date 2021/1/295:09 下午
 */
public class BlockQueueUse {
    public static void main(String[] args) {

        ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<>(3);
// 会抛出异常
//        queue.add("a");
//        queue.add("b");
//        queue.add("c");
////        queue.add("d");
////        IllegalStateException
//
////        queue.remove();
////        queue.remove();
////        queue.remove();
////        NoSuchElementException
//        System.out.println(queue.element());
//        System.out.println(queue.element());
//   有返回值不会抛出异常
//            queue.offer("a");
//            queue.offer("b");
//            queue.offer("c");
//            //满的状态插入会什么都不会发送，就只是插不进
//            queue.offer("d");
//
//            queue.poll();
//            queue.poll();
//            queue.poll();
//            //移除没有的队员，将会返回null
//        System.out.println(queue.poll());
//        queue.forEach(s -> System.out.println(s));

        //阻塞等待
//        try {
//            queue.put("A");
//            queue.put("B");
//            queue.put("C");
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//        //阻塞等待
//        try {
//            queue.take();
//            queue.take();
//            queue.take();
//            queue.take();
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//
        //超时等待
        try {
            queue.offer("A",1, TimeUnit.SECONDS);
            queue.offer("B",1, TimeUnit.SECONDS);
            queue.offer("C",1, TimeUnit.SECONDS);
//            queue.offer("D",1, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //超时等待

        try {
            queue.poll(1,TimeUnit.SECONDS);
            queue.poll(1,TimeUnit.SECONDS);
            queue.poll(1,TimeUnit.SECONDS);
            queue.poll(7,TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
